perm filename SEG.SAI[8,ALS] blob
sn#046195 filedate 1973-05-31 generic text, type T, neo UTF8
00010 BEGIN "SEGMENT"
00020 DEFINE ⊂="COMMENT"; ⊂ 5/30/73;
00030 ⊂ This program has been simplified for use in getting segmentation
00040 results for the workshop. All on line output has been removed. The
00050 progra handle utterances of almost any length altho there is only
00060 space for 100 segments of each of three classes;
00070
00080 REQUIRE "COMSUB.HDR[SYS,ALS]" SOURCE_FILE;
00090 REQUIRE "BLOCKS.HDR[SYS,THO]" SOURCE_FILE;
00100 REQUIRE "SIG" LOAD_MODULE;
00101
00103
00110 EXTERNAL FORTRAN PROCEDURE SIG(REFERENCE INTEGER P);
00120 EXTERNAL STRING PROCEDURE INCHWL;
00130 EXTERNAL PROCEDURE SPOOL(STRING S; INTEGER IOCHAN,FLAGS);
00140 DEFINE BUFSIZ="1024",CNTSIZ="100";
00150 STRING TFILEI,FILEI,OPT1,MESS;
00160 INTERNAL INTEGER ARRAY DATBUF[0:BUFSIZ];
00170 INTEGER ARRAY LFILE[0:'177];
00180 INTEGER CHAN4,CHAN6,EOF,IEOF,FILEC;
00190 INTEGER BPT,SEGCNT,SEGTOT,H,I,J,K,L,Q;
00200 INTERNAL INTEGER M,N,P,RATE,FLAG,SEGC,INTOT,HINT,TFLAG,UPCNT;
00210 LABEL START,LABELA,LABELB,ZZZZ,FINISH;
00220 INTEGER ARRAY LEV1,LEV2,LEV3,LEV4,SEG1,SEG2,SEG3,SEG4[0:CNTSIZ];
00230 INTEGER CON1,CON2,CON3,CON4;
00240
00250 DEFINE ⊂="COMMENT",CR="'15",LF="'12",FF="'14",TB="'11";
00251 DEFINE CRLF="CR&LF", CRLF0="CR&'177&'21"; ⊂ FOR CRLF W/O FORM FEED;
00252 DEFINE TTY="'14",DSK="'13",BDSKO="'12",DPY="'11",BDSKI="'10",TMP="'0";
00254
00290 INTERNAL PROCEDURE LOOKIN(INTEGER CHAN; REFERENCE STRING FILENAME);
00300 BEGIN ⊂ REQUIRES SETBREAK(1,CR,LF,"IN");
00310 BOOLEAN NF;
00320 LOOKUP(CHAN,FILENAME,NF);
00330 WHILE NF DO
00340 BEGIN
00350 OUTSTR(CR&LF&"Can't find "&FILENAME&". try [1,VIN], File=");
00360 FILENAME ← INCHWL ;
00370 LOOKUP(CHAN,FILENAME,NF)
00380 END;
00390 END "LOOKIN";
00400
00410 PROCEDURE REPORT;
00420 BEGIN "REP"
00430 STRING LAB; INTEGER OUT,I,J,K,L;
00440 IF TFLAG≠0 THEN BEGIN
00450 TFLAG←0;
00460 FOR I←0 STEP 5 UNTIL TBLSIZ DO BEGIN
00470 IF TABLET[I+1]=0 THEN DONE ELSE
00480 IF (LDB(POINT(2,TABLET[I+2],12)))>0 THEN BEGIN "CT"
00490 LAB←CVXSTR(TABLET[I+1]); OUT←TABLET[I] ;
00500 IF LDB(POINT(3,TABLET[I],20))-1 < LDB(POINT(3,TABLET[I+2],3)) THEN BEGIN
00510 TABLET[I+2]←TABLET[I+2] LAND '770000000000; DONE END;
00520 IF EQU(LAB,"VOICED")∨EQU(LAB,"FRIC ")∨EQU(LAB,"VOIFRI")
00530 ∨EQU(LAB,"VS ")∨EQU(LAB,"STOP ") THEN
00540
00550 BEGIN LEV1[CON1]←TABLET[I+1]; SEG1[CON1]←OUT;
00560 IF CON1<CNTSIZ THEN CON1←CON1+1 ELSE OUTSTR("Level 1 overflow"); END
00570
00580 ELSE IF
00590 EQU(LAB,"SCHWA ")∨EQU(LAB,"NASAL ")∨EQU(LAB,"GLIDE ")∨EQU(LAB,"VOWEL ")
00600 THEN
00610 BEGIN LEV2[CON2]←TABLET[I+1]; SEG2[CON2]←OUT;
00620 IF CON2<CNTSIZ THEN CON2←CON2+1 ELSE OUTSTR("Level 2 overflow"); END
00630
00640 ELSE IF EQU(LAB,"S/T ")∨EQU(LAB,"SH/K ")∨EQU(LAB,"F/P ") THEN
00650 BEGIN LEV3[CON3]←TABLET[I+1]; SEG3[CON3]←OUT;
00660 IF CON3<CNTSIZ THEN CON3←CON3+1 ELSE OUTSTR("Level 3 overflow"); END
00670
00680 ELSE BEGIN LEV4[CON4]←TABLET[I+1]; SEG4[CON4]←OUT;
00690 IF CON4<CNTSIZ THEN CON4←CON4+1 ELSE OUTSTR("Level 4 overflow"); END;
00700 TABLET[I+2]←TABLET[I+2] LAND '770000000000; END "CT"; END; END;
00710 END "REP";
00720
00730 PROCEDURE ORDER;
00740 BEGIN "ORDER"
00750 INTEGER I,J,K,L;
00760 FOR I←0 STEP 1 UNTIL CON1-2 DO
00770 FOR J←I+1 STEP 1 UNTIL CON1-1 DO
00780 IF LDB(POINT(15,SEG1[J],17))<LDB(POINT(15,SEG1[I],17)) THEN
00790 BEGIN K←LEV1[J]; LEV1[J]←LEV1[I]; LEV1[I]←K;
00800 K←SEG1[J]; SEG1[J]←SEG1[I];SEG1[I]←K; END;
00810 FOR I←0 STEP 1 UNTIL CON2-2 DO
00820 FOR J←I+1 STEP 1 UNTIL CON2-1 DO
00830 IF LDB(POINT(15,SEG2[J],17))<LDB(POINT(15,SEG2[I],17)) THEN
00840 BEGIN K←LEV2[J]; LEV2[J]←LEV2[I]; LEV2[I]←K;
00850 K←SEG2[J]; SEG2[J]←SEG2[I]; SEG2[I]←K; END;
00860 FOR I←0 STEP 1 UNTIL CON3-2 DO
00870 FOR J←I+1 STEP 1 UNTIL CON3-1 DO
00880 IF LDB(POINT(15,SEG3[J],17))<LDB(POINT(15,SEG3[I],17)) THEN
00890 BEGIN K←LEV3[J]; LEV3[J]←LEV3[I]; LEV3[I]←K;
00900 K←SEG3[J]; SEG3[J]←SEG3[I]; SEG3[I]←K; END;
00920 FOR I←0 STEP 1 UNTIL CON4-2 DO
00930 FOR J←I+1 STEP 1 UNTIL CON4-1 DO
00940 IF LDB(POINT(15,SEG4[J],17))<LDB(POINT(15,SEG4[I],17)) THEN
00950 BEGIN K←LEV4[J]; LEV4[J]←LEV4[I]; LEV4[I]←K;
00960 K←SEG4[J]; SEG4[J]←SEG4[I]; SEG4[I]←K; END;
00970 END "ORDER";
00980
00990 PROCEDURE CHART;
01000 BEGIN "CHART"
01010 INTEGER ARRAY LEVA,SEGA[0:800];
01020 INTEGER X,Y,Z,XX,YY,ZZ,LEVS,IMAX,P,Q,HSTART,HLONG,HEND,HFLAG;
01030 STRING STR1,HINT;
01040
01050
01060 I←0; ⊂ Rearrange order for printing;
01070 FOR J←0 STEP 1 UNTIL 100 DO
01080 IF LEV1[J]≠0 THEN BEGIN
01090 LEVA[I]←LEV1[J]; SEGA[I]←SEG1[J]; LEV1[J]←0;
01100 FOR K←J+1 STEP 1 UNTIL 100 DO
01110 IF LEV1[K]=LEVA[I] THEN BEGIN
01120 I←I+1; LEVA[I]←LEV1[K]; SEGA[I]←SEG1[K]; LEV1[K]←0; END;
01130 I←I+1; END;
01140 LEVA[I]←CVSIX("ZZZZ"); I←I+1; ⊂ To produce a space;
01150
01160 FOR J←0 STEP 1 UNTIL 100 DO
01170 IF LEV2[J]≠0 THEN BEGIN
01180 LEVA[I]←LEV2[J]; SEGA[I]←SEG2[J]; LEV2[J]←0;
01190 FOR K←J+1 STEP 1 UNTIL 100 DO
01200 IF LEV2[K]=LEVA[I] THEN BEGIN
01210 I←I+1; LEVA[I]←LEV2[K]; SEGA[I]←SEG2[K]; LEV2[K]←0; END;
01220 I←I+1; END;
01230
01240 FOR J←0 STEP 1 UNTIL 100 DO
01250 IF LEV3[J]≠0 THEN BEGIN
01260 LEVA[I]←LEV3[J]; SEGA[I]←SEG3[J]; LEV3[J]←0;
01270 FOR K←J+1 STEP 1 UNTIL 100 DO
01280 IF LEV3[K]=LEVA[I] THEN BEGIN
01290 I←I+1; LEVA[I]←LEV3[K]; SEGA[I]←SEG3[K]; LEV3[K]←0; END;
01300 I←I+1; END;
01310
01320 FOR J←0 STEP 1 UNTIL 100 DO
01330 IF LEV4[J]≠0 THEN BEGIN
01340 LEVA[I]←LEV4[J]; SEGA[I]←SEG4[J]; LEV4[J]←0;
01350 FOR K←J+1 STEP 1 UNTIL 100 DO
01360 IF LEV4[K]=LEVA[I] THEN BEGIN
01370 I←I+1; LEVA[I]←LEV4[K]; SEGA[I]←SEG4[K]; LEV4[K]←0; END;
01380 I←I+1; END;
01390 LEVA[I]←CVSIX("YYYY"); I←I+1; IMAX←I;
01400 LEVA[I]←0; ⊂ Set stop;
01410
01420 I←J←LEVS←0; N←100;
01430
01440 WHILE I≤400 DO BEGIN "ISTEP"
01450 IF ((N-100) MOD 30)=0 THEN BEGIN
01460 OUT(CHAN6,FF&CR&FILEI&TB&TB&TB&TB&TB&TB&TB&DATIME&CRLF);
01470 OUT(CHAN6,TB&TB&TB&TB&" time in 1.024 secs."&CRLF); END;
01480 SETFORMAT(1,0); OUT(CHAN6,CRLF&" "&CVS(N)[2 TO 2]&"."&CVS(N)[3 TO 3]);
01490 Q←(N-100)*8; P←20;
01500 FOR K←1 STEP 1 UNTIL 10 DO BEGIN N←N+1;
01510 OUT(CHAN6," . "&CVS(N)[2 TO 2]&"."&CVS(N)[3 TO 3]); END;
01520 LEVS←J←0;
01530
01540 WHILE J=0 DO BEGIN "JSTEP"
01550 IF LEVA[I]=0 THEN DONE;
01560 IF LEVA[I]=CVSIX("ZZZZ") THEN BEGIN
01570 OUT(CHAN6,CRLF);
01580 IF LEVA[IMAX-1]≠CVSIX("ZZZZ") THEN IF LEVA[IMAX-1]≠CVSIX("YYYY") THEN
01590 BEGIN
01600 LEVA[IMAX]←CVSIX("ZZZZ"); IMAX←IMAX+1; LEVA[IMAX]←0;END; END ELSE
01610
01620 IF LEVA[I]=CVSIX("YYYY") THEN BEGIN
01630 IF LEVA[IMAX-1]≠CVSIX("YYYY") THEN IF LEVA[IMAX-1]≠CVSIX("ZZZZ") THEN
01640 BEGIN J←1; OUT(CHAN6,CRLF);
01650 LEVA[IMAX]←CVSIX("YYYY"); IMAX←IMAX+1; LEVA[IMAX]←0; END; END
01660
01670 ELSE BEGIN "SAME-J"
01680
01690 IF LEVA[I]≠LEVS THEN BEGIN LEVS←LEVA[I];
01700 STR1←(CVXSTR(LEVS)&" ")[1 TO 6];
01710 Z←0; END;
01720
01730 XX←(LDB(POINT(15,SEGA[I],17)));
01740
01750 IF XX≥160 THEN BEGIN
01760 SEGA[IMAX]←(SEGA[I] LAND '700000777777)+((XX-160) LSH 18);
01770 LEVA[IMAX]←LEVA[I]; IMAX←IMAX+1; LEVA[IMAX]←0; END
01780 ELSE BEGIN
01790
01800 IF Z=0 THEN OUT(CHAN6,CRLF&STR1);
01810 X←(XX+1)%2; K←X-Z;
01820 FOR L←1 STEP 1 UNTIL K DO OUT(CHAN6," ");
01830 YY←LDB(POINT(15,SEGA[I],35)); Y←(YY+1)%2; Z←X+Y;
01840 IF Z>80 THEN BEGIN
01850 LEVA[IMAX]←LEVA[I];
01860 SEGA[IMAX]←(SEGA[I] LAND '700000700000)+Z-79;
01870 Y←81-X;
01880 IMAX←IMAX+1; LEVA[IMAX]←0; END;
01890
01900 FOR L←1 STEP 1 UNTIL Y DO
01910 IF L=2 THEN BEGIN
01913 K←LDB(POINT(3,SEGA[I],2))+LDB(POINT(3,SEGA[I],20))-6;
01917 OUT(CHAN6,CVS(K)) END
01920 ELSE IF ((X+L-1) MOD 4)=0 THEN OUT(CHAN6,"+")
01930 ELSE OUT(CHAN6,"-");
01940 END;
01950 IF J≠0 THEN DONE;
01960 END "SAME-J";
01970 I←I+1;
01980 IF LEVA[I]=0 THEN DONE;
01990 IF J≠0 THEN DONE;
02000 END "JSTEP";
02010
02015 IF LEVA[I]=0 THEN OUT(CHAN6,CRLF);
02020 OUT(CHAN6," Pony "); HEND←-1; P←21;
02030 WHILE Q≤(N-100)*8 DO BEGIN
02040 WHILE Q>HEND DO BEGIN
02050 IF LFILE[P]=0 THEN BEGIN HSTART←999; DONE; END;
02060 HSTART←((LDB(POINT(12,LFILE[P],23)))+1)%2;
02062 HLONG←((LDB(POINT(12,LFILE[P],35)))+1)%2;
02072 IF HLONG<2 THEN HLONG←2;
02080 HEND←HSTART+HLONG-1;
02090 HINT←CVXSTR(LDB(POINT(12,LFILE[P],11)));
02100 HINT←HINT[5 TO 6];
02103 HFLAG←0;
02107 P←P+1;
02110 IF P≥127 THEN BEGIN OUTSTR("No HINTS"&CRLF); DONE END; END;
02120 IF P≥126 THEN DONE;
02150
02155 IF Q=HSTART-1 THEN BEGIN OUT(CHAN6,HINT); HFLAG←1; Q←Q+2; END ELSE
02160 IF Q<HSTART THEN BEGIN OUT(CHAN6," "); Q←Q+1; END ELSE
02170 IF Q=HSTART THEN BEGIN OUT(CHAN6,HINT); HFLAG←1; Q←Q+2; END ELSE
02175 IF HFLAG=0 THEN BEGIN OUT(CHAN6,HINT); Q←Q+2; HFLAG←1; END ELSE
02180 IF Q>HSTART THEN BEGIN IF (Q MOD 4)=0 THEN OUT(CHAN6,"+") ELSE
02190 OUT(CHAN6,"-"); Q←Q+1; END;
02195
02200 END; P←P-1; HEND←0; OUT(CHAN6,CRLF&LF);
02210 IF LEVA[I]=0 THEN DONE;
02220 END "ISTEP";
02230
02231 OUT(CHAN6,"Notes: The + symbols denote scale divisions only."&CRLF&TB&
02232 "The numbers on lines are confidence figures (unsigned, 0 to 8)."
02233 &CRLF&TB&
02234 "The position of pony data may not be exact because of scale compression."
02236 &crlf);
02240 END "CHART";
00010 FILEI←"SEG1.T0[77,THO]";UPCNT←3;OPT1←"N";FILEC←0; CHAN4←4;CHAN6←6;
00040 TABIN(INTOT);
00045 OUTSTR("Trained on: (CR or type)="); MESS←INCHWL;
00047
00050 IF STRIN("Should previous data be saved as TELL.DOC? (Y or CR) ")≠"Y" THEN
00051 BEGIN OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF); ENTER(CHAN6,"TELL.DOC",0);
00055 CLOSE(CHAN6); END ELSE
00060 IF STRIN("Should old TELL.DOC be spooled YorN = ")="Y" THEN
00070 BEGIN OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF); LOOKUP(CHAN6,"TELL.DOC",0);
00080 RENAME(CHAN6,"TELL.OLD",0,EOF); CLOSE(CHAN6);
00095 SPOOL("TELL.OLD",GETCHAN,1); END;
00096
00122
00130 ⊂ **** MAIN ROUTINE STARTS HERE****;
00140 START: CLOSE(CHAN6);
00160 IF OPT1≠"Y" THEN
00170 IF (TFILEI←STRIN("Data file FFT/LPC ("&FILEI&")="))≠"" THEN FILEI←TFILEI
00180 ELSE OPT1←"Y";
00190 IF OPT1="Y" THEN BEGIN FILEC←FILEC+1; SETFORMAT(1,0);
00210 FILEI←"SEG"&CVS(FILEC)&".T0[77,THO]";
00220 OUTSTR("Starting on "&FILEI); END;
00250
00260 FOR I←0 STEP 5 UNTIL TBLSIZ-5 DO IF TABLET[I+1]=0 THEN DONE
00270 ELSE BEGIN TABLET[I+2]←TABLET[I+2] LAND '770000000000;
00280 TABLET[I+3]←0; END; ⊂ INITIALISE FOR EVENT;
00290 FOR I←0 STEP 1 UNTIL CNTSIZ DO BEGIN LEV1[I]←LEV2[I]←LEV3[I]←LEV4[I]←0;
00300 SEG1[I]←SEG2[I]←SEG3[I]←SEG4[I]←0; END;
00310 CON1←CON2←CON3←CON4←0; CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
00340 LOOKIN(CHAN4,FILEI); EOF←SEGC←SEGCNT←0;
00360 ARRYIN(CHAN4,LFILE[0],'200); ⊂ Input header;
00370 SEGTOT←(LFILE[0])*3%128; RATE←LFILE[2];
00375 OUTSTR(TB&"Segtot="&CVS(SEGTOT)&TB&"Sampling rate="&CVS(LFILE[2])&CRLF);
00390 IF RATE=0 THEN RATE←CVD(STRIN("Sampling rate missing. Rate = "));
00400
00420 OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF); LOOKUP(CHAN6,"TELL.DOC",0);
00440 DEFINE UGETF="'073000000000"; START_CODE; UGETF 6,I; END;
00480 ENTER(CHAN6,"TELL.DOC",0); USETO(CHAN6,I);
00510 OUT(CHAN6,TB&TB&TB&" A.I. Laboratory"&
00515 TB&CRLF&TB&TB&TB&"Stanford University"
00520 &CRLF&LF&TB&"Segmentation data for ARPA Speech Segmentation Workshop"&CRLF);
00530 OUT(CHAN6,TB&" Pony data after SCRL as spotted by R.Thosar or N.Miller"&crlf);
00540 OUT(CHAN6,CRLF&TB&"Data file "&FILEI&" "&TB&TB&DATIME&CRLF&TB);
00547 FOR I←10 STEP 1 UNTIL 20 DO OUT(CHAN6,CVXSTR(LFILE[I]));
00558 OUT(CHAN6,CRLF);
00561 IF MESS≠"" THEN OUT(CHAN6,TB&"Trained on: "&MESS&CRLF);
00570 SETFORMAT(5,0);
00590
00600 LABELA: ⊂ Put all outputs into the off state;
00610 FOR I←0 STEP 5 UNTIL TBLSIZ-5 DO
00620 IF TABLET[I+1]≠0 THEN TABLET[I]←'777777777777 ELSE DONE;
00630 CON1←CON2←CON3←CON4←0; HINT←H←0; TABLES[2]←HLIST[0];
00640
00650 WHILE EOF=0 DO BEGIN "DATAIN"
00660 ARRYIN(CHAN4,DATBUF[0],BUFSIZ); ⊂ Get data;
00670 BPT←POINT(6,DATBUF[0],-1);
00680
00690 FOR Q←1 STEP 1 UNTIL BUFSIZ%4 DO BEGIN
00700 SEGC←SEGC+1;
00710 IF SEGC>SEGTOT THEN DONE;
00720 FOR P←0 STEP 1 UNTIL 23 DO INDAT[P]←ILDB(BPT);
00730 LABELB: SIG(P); REPORT;
00750 END;
00760 IF SEGC>SEGTOT THEN DONE;
00770 END "DATAIN"; CLOSE(CHAN4);
00780
00790 FOR I←0 STEP 1 UNTIL INSIZ-1 DO INDAT[I]←0;
00800 FOR I←0 STEP 1 UNTIL 4 DO BEGIN SEGC←SEGC+1; SIG(P); REPORT; END;
00830
00840 ⊂ **** Off line listing of counter outputs ****;
00850 ORDER;
00860 OUT(CHAN6,CRLF&TB&
00870 "In CMU units SEG."&TB&" Levels"&TB&" In units of 6.4 ms.");
00880 OUT(CHAN6,CRLF&TB&"Begin"&TB&" End "
00890 &TB&"Label"&TB&" Ave."&TB&"Max. "&TB&"Begin"&TB&" End"
00900 &TB&"Count"&CRLF);
00910 OUT(CHAN6,CRLF&TB&
00920 "First level [voiced, fric., voiced-stop, stop]"
00930 &CRLF);
00940 FOR I←0 STEP 1 UNTIL CON1-1 DO BEGIN
00950 J←LDB(POINT(15,SEG1[I],17)); K←LDB(POINT(15,SEG1[I],35)); L←J+K-1;
00970 OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS((L) LSH 6)&TB
00980 &CVXSTR(LEV1[I])&TB&CVS(LDB(POINT(3,SEG1[I],2)))
00990 &CVS(LDB(POINT(3,SEG1[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01010 OUT(CHAN6,CRLF&LF&TB& "Voiced [vowel, glide, nasal]"&CRLF);
01020
01030 FOR I←0 STEP 1 UNTIL CON2-1 DO BEGIN
01040 J←LDB(POINT(15,SEG2[I],17)); K←LDB(POINT(15,SEG2[I],35)); L←J+K-1;
01060 OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS(L LSH 6)&TB
01070 &CVXSTR(LEV2[I])&TB&CVS(LDB(POINT(3,SEG2[I],2)))
01080 &CVS(LDB(POINT(3,SEG2[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01110 OUT(CHAN6,CRLF&LF&TB&"Fricatives [S/T, SH/K, F/P]"&CRLF);
01120
01130 FOR I←0 STEP 1 UNTIL CON3-1 DO BEGIN
01140 J←LDB(POINT(15,SEG3[I],17)); K←LDB(POINT(15,SEG3[I],35)); L←J+K-1;
01160 OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS(L LSH 6)
01170 &TB&CVXSTR(LEV3[I])&TB&CVS(LDB(POINT(3,SEG3[I],2)))&
01180 CVS(LDB(POINT(3,SEG3[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01190 OUT(CHAN6,CRLF&LF&TB&"Vowels [front, mid, back]"&CRLF);
01200 FOR I←0 STEP 1 UNTIL CON4-1 DO BEGIN
01210 J←LDB(POINT(15,SEG4[I],17)); K←LDB(POINT(15,SEG4[I],35)); L←J+K-1;
01230 OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS(L LSH 6)
01240 &TB&CVXSTR(LEV4[I])&TB&CVS(LDB(POINT(3,SEG4[I],2)))&
01250 CVS(LDB(POINT(3,SEG4[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01280 OUT(CHAN6,CRLF);
01282
01285 CHART; OUT(CHAN6,FF); CLOSE(CHAN6);
01290
01340 GO TO START;
01360 FINISH:
01370 END "SEGMENT";